Skip to content

feat(changes): expose RSS feeds for all change views#19516

Merged
nijel merged 1 commit into
WeblateOrg:mainfrom
nijel:rss
May 12, 2026
Merged

feat(changes): expose RSS feeds for all change views#19516
nijel merged 1 commit into
WeblateOrg:mainfrom
nijel:rss

Conversation

@nijel
Copy link
Copy Markdown
Member

@nijel nijel commented May 12, 2026

This allows users to follow any changes search, not only these few predefined views.

Fixes #7518

@nijel nijel added this to the 2026.5 milestone May 12, 2026
@nijel nijel self-assigned this May 12, 2026
@argos-ci
Copy link
Copy Markdown

argos-ci Bot commented May 12, 2026

The latest updates on your projects. Learn more about Argos notifications ↗︎

Build Status Details Updated (UTC)
default (Inspect) ⚠️ Changes detected (Review) 9 changed May 12, 2026, 7:07 PM

Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 9d95144076

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread weblate/accounts/views.py
Comment on lines +1936 to +1939
defaults={
"frequency": subscription.frequency,
"onetime": subscription.onetime,
},
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Preserve recurring lock subscriptions

When a user already has a regular component-level LockNotification from the notification settings, this update_or_create lookup matches that row and the defaults flip it to onetime=True and instant frequency. In that scenario, clicking the locked-component one-time notification button silently converts their recurring subscription into one that will be deleted after the next lock/unlock event, so future lock notifications stop unexpectedly.

Useful? React with 👍 / 👎.

Comment thread weblate/trans/views/changes.py Outdated
description=str(change),
author_name=change.get_user_display(False),
pubdate=change.timestamp,
unique_id=link,
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Use per-change GUIDs in RSS items

For multiple changes that point to the same unit/component, change.get_absolute_url() returns the same object URL for each change, so these RSS entries all get the same GUID. Many feed readers use GUIDs for de-duplication, which means later changes to the same string can be suppressed even though they are distinct feed items; the GUID should include the change identity rather than just the target URL.

Useful? React with 👍 / 👎.

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR adds a new RSS endpoint for the changes browser so users can subscribe to any changes view (including arbitrary filters and scoped paths), addressing #7518. It also improves subscription/unsubscribe plumbing to support a better UX on locked component pages.

Changes:

  • Add /changes/rss/ (and scoped /changes/rss/<path>/) rendering RSS for the same filtered/scoped queryset as the changes browser.
  • Update the changes list UI to link to the RSS endpoint while preserving the active query string.
  • Add an unsubscribe-capable “unlock notification” button for locked components (plus supporting model/view/template-tag changes and tests).

Reviewed changes

Copilot reviewed 13 out of 13 changed files in this pull request and generated 1 comment.

Show a summary per file
File Description
weblate/urls.py Adds URL routes for the new filtered changes RSS view.
weblate/trans/views/changes.py Implements ChangesRSSView and refactors URL/title helpers for changes views.
weblate/trans/tests/test_changes.py Adds coverage for RSS output, filtering, and scoped RSS paths.
weblate/templates/trans/change_list.html Ensures the RSS link includes the active filter query string.
docs/api.rst Documents the new /changes/rss/ endpoints and supported filters.
docs/changes.rst Notes the new filtered RSS capability in the release notes.
weblate/templates/snippets/component/lock.html Adds unsubscribe/subscribe toggle UI for lock notifications.
weblate/accounts/templatetags/subscriptions.py Adds a template tag to locate an active lock subscription’s unsubscribe URL.
weblate/accounts/views.py Makes “subscribe” idempotent via update_or_create; uses signed IDs for unsubscribe.
weblate/accounts/models.py Centralizes signing/unsigning + unsubscribe URL generation on Subscription.
weblate/accounts/notifications.py Reuses Subscription.get_unsubscribe_url() when rendering notification contexts.
weblate/accounts/tests/test_views.py Updates unsubscribe tests to use the new signed-id helpers.
weblate/trans/tests/test_lock.py Adds coverage for subscribe/unsubscribe behavior on locked component pages.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread weblate/templates/snippets/component/lock.html
This allows users to follow any changes search, not only these few
predefined views.

Fixes WeblateOrg#7518
@nijel nijel enabled auto-merge (rebase) May 12, 2026 18:43
@nijel nijel merged commit e9bea83 into WeblateOrg:main May 12, 2026
30 of 33 checks passed
@nijel nijel deleted the rss branch May 12, 2026 19:32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

More RSS feeds

2 participants